Passed
Pull Request — master (#103)
by Mark
01:35
created

Relation.getRelationalFields   B

Complexity

Conditions 6

Size

Total Lines 3
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 6
eloc 3
dl 0
loc 3
rs 8.6666
c 0
b 0
f 0
1
import Field from "./Field";
2
import ForeignKey from "./Field/ForeignKey";
3
import {ModelStaticInterface, TableInterface} from "../../JeloquentInterfaces";
4
5
/**
6
 *
7
 */
8
export default class Relation extends Field {
9
10
    foreignKey: string;
11
12
    model: ModelStaticInterface;
13
14
    constructor(model: ModelStaticInterface, foreignKey: string = null, name: string = null) {
15
        const className = name ?? model.snakeCaseClassName;
16
        super(className);
17
        this.model = model;
18
        this.foreignKey = foreignKey;
19
    }
20
21
    set _value(value: Record<string, unknown>|Record<string, unknown>[]) {
22
        if (!Array.isArray(value)) {
23
            value = [value];
24
        }
25
26
        value.forEach((modelValue) => {
27
            if (!(this.model.ids().includes(modelValue?.id))) {
28
                this.model.insert(modelValue);
29
            }
30
        });
31
    }
32
33
    getRelationalFields(): Array<ForeignKey> {
34
        return [new ForeignKey(this.foreignKey).setRelation(this)];
35
    }
36
37
    tableSetup(table: TableInterface): void {
38
        table.registerIndex(this.foreignKey);
39
    }
40
}